"use strict";

var router = require("router"),
    Q = require('q');



function ExceptionService() {
    console.log("ExceptionService constructor");
    this.fr = {
        "Default": "Un problème technique empêche l'opération.",
        "login is not defined.": "Le login est vide.",
        "Login already exists.": "Le login existe déjà.",
        "Login is not authorized.": "Le login n'est pas autorisé.",
        "Password is empty.": "Le mot de passe est vide.",
        "Email is empty.": "L'adresse email est vide",
        "Location is empty.": "L'adresse est vide.",
        "Address is not well defined.": "L'adresse est incorrect.",
        "Bad login format.": "Le format du login est incorrect.",
        "Bad password format.":  "Le format du password est incorrect.",
        "Bad phone number format.": "Le format du numéro de telephone est incorrect.",
        "Category is not defined.": "Veuillez séléctionner une catégorie.",
        "name is not defined.": "Le nom est vide.",
        "User is not an employee.": "L'utilisateur n'est pas enregistré.",
        "User is not defined.": "L'utilisateur n'est pas enregistré.",
        "No content.": "Veuillez ajouter un message.",
        "Alert type is not defined.": "Veuillez séléctionner un type de message.",
        "Unknown alert delay": "Veuillez séléctionner une durée."
    }
}
ExceptionService.prototype.constructor = ExceptionService;

/*-------------------------------------------------------*/
/*common */
ExceptionService.prototype.send = function (request, response, exception) {
    if (request == undefined) throw new Error('No request');
    if (exception == undefined) throw new Error('Exception is null');
    var self = this;

    console.log("Error: " + exception.message + " " + exception.stack);

    return Q.fcall(function () {
        if (exception.toString() == 'Error: 401') { //401; //418;//401;
            return response.send({ statusCode: 401, request: request, content: { message: "Need some credential"} });
        }

        return self.translateToFr(exception.message).then(function (message) {
            return response.send({ statusCode: 500, request: request, content: { message: message } });
        });
    }).then(function () {
        return self;
    })
};

ExceptionService.prototype.translateToFr = function (message) {
    var self = this;
    return Q.fcall(function () {
        var res = self.fr[message] || self.fr["Default"];
        console.log("translate |" + message + "| => |" + res + "|");
        return res;
    });
};


exports = module.exports = new ExceptionService();